#ifndef LIBRARY_SERVICE_ACHIEVE_H
#define LIBRARY_SERVICE_ACHIEVE_H

#include "Library_service.h"
#include "User.h"
#include "Classbook.h"
#include "Book.h"
#include "Tool.h"
#include <string.h>
#include <vector>
#include "Library_data.h"

using namespace std;

namespace LB
{
	class Library_service_achieve:public Library_service
	{
		
	public:
		Library_data* lib_file;
		vector<Classbook> v_classbooks;
		vector<User> v_users;
		//构造函数中动态创建Library_data_achieve对象
		//lib_file调用loadbook函数将文件中的书籍数据加载到v_classbooks容器中
		//lib_file调用loadusers函数将文件中的用户数据加载到v_users容器中
		Library_service_achieve();

		//将参数传入的书种类类压入容器中
		bool addclass(Classbook &classbook);

		//根据id删除容器中的书类类
		bool deleteclass(int classbook_id);
		//显示容器中所有书的种类名
		void listclass(void);

		//根据传入的种类id，找到对应的classbook对象，调用其addbook(Book &book)函数
		bool addbook(int classbook_id,Book &book);
		//根据传入的种类id，找到对应的classbook对象，调用deletebook(int book_id)函数
		bool deletebook(int classbook_id,int book_id);

		//通过bookid循环使用classbook对象的find函数返回容器中对应的book对象，
		//如果book在馆,通过userid找到对应user对象，
		//并调用其borrowbook(int bookid,char* bookname)函数在maps添加新元素，若成功将vector<Classbook>中的书籍状态设置为不在馆,
		//借书人id赋值为userid,借书次数borrow_times+1,如果不在馆，则只将book的预约人id设置为userid。
		bool borrowbook(int bookid,int userid); 
		//通过userid，find(==运算符)找到该user对象，调用user对象的revertbook函数将maps中
		//对应的元素删除，并通过bookid循环调用classbook的find函数找到对应书籍book修改在馆状态，
		//如果预约id不为0，则调用此id对应的user对象，调用其borrowbook(int bookid,char* bookname);
		//并判断是否成功，若成功则将借书id设为预约id，预约id清0。
		void revertbook(int bookid,int userid);
		
		//显示当前书类下所有的书籍，找到对应的classbook对象，调用其listbook(void)函数
		void listbook(int classbook_id);
		
		//显示所有书籍，循环调用classbook对象的listbook()函数
		void listallbook(void);
		
		//将参数传入的user对象压入v_users容器中
		void adduser(User &user);
		void addbalance(void);
		//根据id找到容器中对应的user，并删除
		void deleteuser(int user_id);
		bool addbalance(int id, float balance); 
		//显示所有用户
		void listuser(void);
		/*lib_file调用savebook函数将v_classbooks容器中书籍数据存储到文件中
		lib_file调用saveusers函数将v_users容器中的用户数据存储到文件中
		释放lib_file*/
		~Library_service_achieve();		
	};
}

#endif